using System;
using System.Collections.Generic;
using System.Text;

using RRHH.Competencias.DataAccessLayer;
using RRHH.Competencias.DataAccessLayer.Generic;
using RRHH.Competencias.Entities;

namespace RRHH.Competencias.Controladores
{
    /// <summary>
    /// Agrupa las operaciones relacionadas con los Ciclos
    /// </summary>
    public class GestorSector
    {
        private IDALSector persistencia;

        public GestorSector()
        {
            this.persistencia = DALProvider.GetDALSector();
        }
        /// <summary>
        /// Crea un ciclo
        /// </summary>
        /// <param name="sector">Ciclo a crear. Se devuelve el ID del ciclo creado</param>
        public void Registrar(Sector sector)
        {
            if (sector == null) throw new Exception("Debe indicar el ciclo");

            //TODO: Reglas de negocio

            persistencia.Guardar(sector);
        }

        /// <summary>
        /// Modifica la informacion disponible de un Ciclo
        /// </summary>
        /// <param name="sector">Ciclo a eliminar</param>
        public void Modificar(Sector sector)
        {
            if (sector == null) throw new Exception("Debe indicar el ciclo");
            if (sector.Id <= 0) throw new Exception("Debe indicar el ID del ciclo");

            //TODO: Reglas de negocio

            persistencia.Actualizar(sector);
        }

        /// <summary>
        /// Desactiva un Ciclo
        /// </summary>
        /// <param name="sector">Ciclo a Desactivar. Indicar el ID</param>
        public void Desactivar(Sector sector)
        {
            if (sector == null) throw new Exception("Debe indicar el ciclo");
            if (sector.Id <= 0) throw new Exception("Debe indicar el ID del ciclo");

            //TODO: Reglas de negocio

            persistencia.Desactivar(sector);
        }

        /// <summary>
        /// Activa un Ciclo
        /// </summary>
        /// <param name="sector">Ciclo a Activar. Indicar el ID</param>
        public void Activar(Sector sector)
        {
            if (sector == null) throw new Exception("Debe indicar el ciclo");
            if (sector.Id <= 0) throw new Exception("Debe indicar el ID del ciclo");

            //TODO: Reglas de negocio

            persistencia.Activar(sector);
        }

        /// <summary>
        /// Obtiene los datos de un Ciclo
        /// </summary>
        /// <param name="sector">Ciclo a completar. Indicar el ID</param>
        public void Completar(Sector sector)
        {
            if (sector == null) throw new Exception("Debe indicar el ciclo");
            if (sector.Id <= 0) throw new Exception("Debe indicar el ID del ciclo");

            persistencia.Completar(sector);
        }

        /// <summary>
        /// Recupera un listado de todos los ciclos registrados
        /// </summary>
        /// <returns>Listado con todos los ciclos</returns>
        public List<Sector> ObtenerListadoCompleto()
        {
            return persistencia.BuscarTodos();
        }

        public List<Sector> Buscar(long? ciclo_id, string nombre, string descripcion, long? colaborador_id, bool activo)
        {
            try
            {
                return persistencia.Buscar(ciclo_id, nombre, descripcion, null, activo);
            }
            catch (Exception ex)
            {
                throw new DALException(ex.Message);
            }

        }

        public List<Sector> BuscarTodos(bool soloActivos)
        {
            try
            {
                return persistencia.BuscarTodos(soloActivos);
            }
            catch (Exception ex)
            {
                throw new DALException(ex.Message);
            }
        }

        
    }
}


